package com.example.roadeyeserver.util;

import com.example.roadeyeserver.constant.ProjectConstant;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

public class DateTimeUtil {


    /**
     * 获取时间段内所有时间
     * @param startTime
     * @param endTime
     * @param timeType
     * @return
     */
    public static List<String> generateTimeList(String startTime, String endTime, String timeType) {
        List<String> result = new ArrayList<>();

        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        DateTimeFormatter hourFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

        if (ProjectConstant.HOUR.equals(timeType)) {
            // 按小时处理
            LocalDateTime start = LocalDateTime.parse(startTime, hourFormatter);
            LocalDateTime end = LocalDateTime.parse(endTime, hourFormatter);
            while (!start.isAfter(end)) {
                result.add(start.format(hourFormatter));
                start = start.plusHours(1);
            }
            // 添加下一个小时
            result.add(start.format(hourFormatter));
        } else if (ProjectConstant.DAY.equals(timeType)) {
            // 按天处理
            LocalDate start = LocalDate.parse(startTime, dateFormatter);
            LocalDate end = LocalDate.parse(endTime, dateFormatter);
            while (!start.isAfter(end)) {
                result.add(start.format(dateFormatter));
                start = start.plusDays(1);
            }
            // 添加下一天
            result.add(start.format(dateFormatter));
        } else if (ProjectConstant.MONTH.equals(timeType)) {
            // 按月处理
            YearMonth start = YearMonth.parse(startTime, monthFormatter);
            YearMonth end = YearMonth.parse(endTime, monthFormatter);
            while (!start.isAfter(end)) {
                // 固定取每月第一天
                result.add(start.atDay(1).format(dateFormatter));
                start = start.plusMonths(1);
            }
            // 添加下一个月的第一天
            result.add(start.atDay(1).format(dateFormatter));
        }
        return result;
    }

    /**
     * 根据当前时间点获取展示的时间点名称
     * @param time 格式是yyyy-MM-dd HH:mm:ss
     * @param timeType
     * @return
     */
    public static String getTimePoint(String time, String timeType) {
        switch (timeType) {
            // 按小时:月-日 时:分:秒
            case ProjectConstant.HOUR:
                return time.substring(5, 10) + " " + time.substring(11, 19);
            // 按天:月-日
            case ProjectConstant.DAY:
                return time.substring(5, 10);
            // 按月:年-月
            case ProjectConstant.MONTH:
                return time.substring(2, 7);
            default:
            return "";
        }
    }

}
